CREATE PROCEDURE [dbo].[PDA_MakeInvoice]
    @IsEntry BIT,
    @IsAdditional BIT = 0,
    @IsWarehouseTransaction BIT = 0,
    @PersonCode VARCHAR(5),
    @WarehouseCode VARCHAR(3),
    @TempInvoiceId NUMERIC(18, 0),
    @PDAId NUMERIC(18, 0)
AS
BEGIN
    --Declare @IsEntry bit = 0
    --Declare @PersonCode Varchar(5) = '40602'
    --Declare @WarehouseCode Varchar(3) = '103'
    --Declare @InvoiceId Numeric(18,0) = 463241
    --Declare @PdaId Numeric(18,0) = 93 
    DECLARE @ErrorMsg NVARCHAR(MAX);
    DECLARE @Is BIT = 0;
    IF EXISTS
    (
        SELECT 1
        FROM Manager.dbo.tblHpda H
        WHERE H.AutoID = @PDAId
              AND H.Kind_Flag = 4
    )
        SET @Is = 1;

    IF (
           @IsWarehouseTransaction = 0
           AND @Is = 1
       )
       OR
       (
           @IsWarehouseTransaction = 1
           AND @Is = 0
       )
       OR NOT EXISTS
    (
        SELECT 1
        FROM [Manager].dbo.tblHpda
        WHERE AutoID = @PDAId
              AND KindSave = 1
    )
    BEGIN
        SET @ErrorMsg = N'     ';
        RAISERROR(@ErrorMsg, 16, 1);
        RETURN;
    END;
    BEGIN TRY
        BEGIN TRAN;
        INSERT INTO dbo.TmpHavaleh
        (
            Radif,
            Reciver,
            Sender,
            K_Code,
            K_Qty1,
            Id_Havaleh,
            K_Qty2,
            Exp_Flag,
            Point_Flag,
            Serial_Flag,
            Make_Flag,
            Hamrah_Flag,
            CtrMojodi,
            R_Unit1_2,
            Price_KHarid,
            Price_Forosh,
            Price_Omdeh,
            Price_Consumer,
            Price_Finish,
            Takhfif_Flag
        )
        SELECT ROW_NUMBER() OVER (ORDER BY Row) Radif,
               CASE
                   WHEN @IsEntry = 1 THEN
                       @WarehouseCode
                   ELSE
                       @PersonCode
               END,
               CASE
                   WHEN @IsEntry = 1 THEN
                       @PersonCode
                   ELSE
                       @WarehouseCode
               END,
               D.K_Code,
               CASE
                   WHEN @IsAdditional = 0 THEN
                       D.K_Qty
                   ELSE
                       -1 * D.K_Qty
               END,
               @TempInvoiceId,
               CASE
                   WHEN @IsAdditional = 0 THEN
                       ROUND(D.K_Qty / K.R_Unit1_2, 3)
                   ELSE
                       -1 * ROUND(D.K_Qty / K.R_Unit1_2, 3)
               END,
               K.Exp_Flag,
               K.Point_Flag,
               K.Serial_flag,
               K.Make_Flag,
               K.Hamrah_Flag,
               K.CtrMojodi,
               K.R_Unit1_2,
               A.Price_Kharid,
               A.Price_Forosh,
               A.Price_Omdeh,
               A.Price_Consumer,
               A.Price_Finish,
               K.Duty_Flag
        FROM [Manager].dbo.tblHpda H
            JOIN [Manager].dbo.tblPda D
                ON H.AutoID = D.AutoID
            INNER JOIN dbo.KalaId K
                ON K.K_Code = D.K_Code COLLATE Arabic_CI_AS
            INNER JOIN dbo.Anbar A
                ON A.K_Code = K.K_Code COLLATE Arabic_CI_AS
        WHERE A.A_Code = @WarehouseCode
              AND H.KindSave = 1
              AND H.AutoID = @PDAId
              AND
              (
                  (
                      @IsAdditional = 0
                      AND D.K_Qty > 0
                  )
                  OR
                  (
                      @IsAdditional = 1
                      AND D.K_Qty < 0
                  )
              )
        ORDER BY ISNULL(D.Row, 0);
        --PRINT @@ROWCOUNT
        --> deletes

        IF @IsAdditional = 0
        BEGIN
            DELETE FROM [Manager].dbo.tblPda
            WHERE AutoID = @PDAId
                  AND K_Qty > 0;
            IF NOT EXISTS (SELECT 1 FROM [Manager].dbo.tblPda WHERE AutoID = @PDAId)
                DELETE FROM [Manager].dbo.tblHpda
                WHERE AutoID = @PDAId;
        END;
        ELSE
        BEGIN
            DELETE FROM [Manager].dbo.tblPda
            WHERE AutoID = @PDAId
                  AND K_Qty < 0;
            IF NOT EXISTS (SELECT 1 FROM [Manager].dbo.tblPda WHERE AutoID = @PDAId)
                DELETE FROM [Manager].dbo.tblHpda
                WHERE AutoID = @PDAId;
        END;
        COMMIT TRAN;
    END TRY
    BEGIN CATCH
        SET @ErrorMsg = N'   ';
        RAISERROR(@ErrorMsg, 16, 1);
        PRINT ERROR_MESSAGE();
        ROLLBACK TRAN;
    END CATCH;

END;
